package com.bjc.scheduler.elasticjob.quickstart.job;

import com.bjc.scheduler.elasticjob.quickstart.model.FileCustom;
import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

/**
 * @program: elastic-job-quickstart
 * @description:  文件备份任务
 * @author: bjc
 * @create: 2021-08-15 19:52
 */
public class FileBackupJob implements SimpleJob {

    /**
     * 每次任务执行要备份的文件的数量
     */
    private final int FETCH_SIZE = 1;

    /**
     * 文件列表
     */
    public static List<FileCustom> files = new ArrayList<>();

    /**
     * 任务执行代码逻辑
     * @param shardingContext
     */
    @Override
    public void execute(ShardingContext shardingContext) {
        System.out.println("作业分片:"+shardingContext.getShardingItem());
        //获取为备份的文件
        List<FileCustom> fileCustomList = fetchUnBackupFiles(FETCH_SIZE);

        //进行文件备份
        backupFiles(fileCustomList);
    }

    /**
     * 获取未备份的文件
     * @param count  文件数量
     * @return
     */
    public List<FileCustom> fetchUnBackupFiles(int count){
        //获取的文件列表
        List<FileCustom> fileList = new ArrayList<>();
        int num = 0;
        for (FileCustom file : files) {
            if (num>=count){
                break;
            }
            //未备份
            if (!file.getBackUp()){
                fileList.add(file);
                num++;
            }
        }
        System.out.printf("time:%s,获取文件%d个\n", LocalDateTime.now(),num);
        return fileList;
    }

    /**
     * 文件备份
     * @param files
     */
    public void backupFiles(List<FileCustom> files){
        files.forEach(file->{file.setBackUp(true);
            System.out.printf("time:%s,备份文件，名称：%s,类型:%s \n", LocalDateTime.now(),file.getName(),file.getType());});
    }
}
